package helper

import (
	"github.com/gorilla/mux"
	"net/http"
	"os"
	"io"
	"log"
)

//上传  post
func UploadHandler(w http.ResponseWriter, r *http.Request) {
	//随机生成一个不存在的fileid
	var imgid string
	for{
		imgid=MakeImageID()
		//不是重复的id  不存在
		if !FileExist(ImageID2Path(imgid)){
			break
		}
	}

	//上传参数为uploadfile
	r.ParseMultipartForm(32 << 20)
	file, _, err := r.FormFile("uploadfile")
	if err != nil {
		log.Println(err)
		w.Write([]byte("Error:上传错误》获取文件"))
		return
	}
	defer file.Close()

	//检测文件类型
	buff := make([]byte, 512)
    _, err = file.Read(buff)
    if err != nil {
		log.Println(err)
		w.Write([]byte("Error:上传错误》读取文件"))
		return
    }
    filetype := http.DetectContentType(buff)
	if filetype!="image/jpeg"{
		w.Write([]byte("Error:上传错误》不是JPEG"))
		return
	}

	//回绕文件指针
	if  _, err = file.Seek(0, 0); err!=nil{
		log.Println(err)
	}
	//提前创建整棵存储树（如果不进行存储树结构创建，下面的文件创建不会成功）。
	if err=BuildTree(imgid); err!=nil{
		log.Println(err)
	}

	//将文件写入ImageID指定的位置
	f, err := os.OpenFile(ImageID2Path(imgid), os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		log.Println(err)
		w.Write([]byte("Error:上传错误》保存错误"))
		return
	}
	defer f.Close()
	io.Copy(f, file)
	w.Write([]byte(imgid))
}

//下载  get
func DownloadHandler(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	imageid := vars["imgid"]

	if len([]rune(imageid)) != 16 {
		w.Write([]byte("Error:下载错误》图片ID不正确"))
		return
	}
	imgpath := ImageID2Path(imageid)
	///fmt.Println(imgpath)
	if !FileExist(imgpath) {
		w.Write([]byte("Error:下载错误》图片不存在"))
		return
	}
	http.ServeFile(w, r, imgpath)
}

//首页输出
func HomeHandler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("<html><body><center><h1>It Works!</h1></center><hr><center>Six Image Server</center></body></html>"))
}
